
package com.rock.code.common.util;
/*
 * 创建日期 2006-8-22
 *
 * TODO 要更改此生成的文件的模板，请转至
 * 窗口 － 首选项 － Java － 代码样式 － 代码模板
 */

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;


/**
 *
 * @author qiuzhongquan
 * @version 1.0
 */
public class WriteFile {

    /**
     * 把参数sFileContent 中的内容写入到参数sFileName 文件中
     * <p>
     * 公用的写入文本型文件的方法。非追加方式，从头开始写
     * <p>
     * 今后需扩展成可追加和不追加两种方式写文件。
     *
     * @param sFileName
     * @param sFileContent
     */
    public void writeFile(String sFileName, String sFileContent) {
        try {
            File file_pm = new File(sFileName);
            FileOutputStream fos = new FileOutputStream(file_pm);
            OutputStreamWriter osw = new OutputStreamWriter(fos, "gb2312");
            BufferedWriter fw = new BufferedWriter(osw);
            fw.write(sFileContent);
            fw.close();
            osw.close();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void writeFile(String sFileName, StringBuffer sFileContent) {
        writeFile(sFileName, sFileContent.toString());
    }


    /**
     * 功能：把经典的七元组数据写入中间文件。写文件的方式是先写入内存中，然后再一块写到文件中，故不存在时间延迟问题。
     * <p>
     * 注意:只有相同unit_id和kpi_id的数据才能同时写入此Vector作为参数传递进来。
     * <p>
     * 生成采集的文件 文件名：unit_id+.+kpi_id+.+getFileName() 文件内容：unit_id kpi_id
     * kpi_values day datatime(14位) clltime() region_code busi_code
     *
     * @param sFileDir     中间文件存放目录
     * @param datalist 数据Vector,里面存放的是TblSevenStruc结构数据，TblSevenStruc结构中的采集时间和数据时间都是14位的格式
     *                     <p>
     *                     没有考虑数据量过大的问题。
     */
    public void writeSevenStrucFile(String sFileDir, Vector datalist) {
        StringBuffer sFileContent = new StringBuffer();
        String filename = "";
        String day = "";
        for (int i = 0; i < datalist.size(); i++) {
            TblSevenStruc tblSevenStruc = (TblSevenStruc) datalist.get(i);

            day = tblSevenStruc.getData_time().substring(7, 8);// 首先获取日数据
            if ("00".equals(day)) {// 如果日为00，则说明是月数据，截取月份
                day = tblSevenStruc.getData_time().substring(5, 6);
            }

            if (i == 0) {
				/* 生成文件名称 */
                filename = sFileDir + System.getProperty("file.separator")
                        + tblSevenStruc.getUnit_id().replaceAll(":","-").replaceAll("-/", "") + "."
//                        + tblSevenStruc.getKpi_id() + "."
//                        + tblSevenStruc.getRegion_code() + "."
//                        + tblSevenStruc.getBusi_code() + "."
                        + getCurrTime();
            }

            sFileContent.append(tblSevenStruc.getUnit_id());
            sFileContent.append("	");
            sFileContent.append(tblSevenStruc.getKpi_id());
            sFileContent.append("	");
            sFileContent.append(tblSevenStruc.getData_time());
            sFileContent.append("	");
            sFileContent.append(tblSevenStruc.getKpi_values());
            sFileContent.append("	");
            sFileContent.append(tblSevenStruc.getRegion_code());
            sFileContent.append("\n");
        }

        // 写文件
        if(!"".equals(filename) && !"".equals(sFileContent)){
            writeFile(filename, sFileContent);
        }
    }


    public final static String getNowTime() {
        SimpleDateFormat formatter1
                = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return  formatter1.format(new Date());
    }

    synchronized private String getCurrTime() {
        Date date = new Date();
        String sCurrTime = "" + date.getTime();
        return sCurrTime;
    }


}